package com.suneast.suneaststore.util.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class RegexUtil {
    //手机号开头集合
    //        130，131，132，133，134，135，136，137，138，139
    //        145，147
    //        150，151，152，153，155，156，157，158，159
    //        166，
    //        170,171,172,173,174,175,176，177，178
    //        180，181，182，183，184，185，186，187，188，189
    //        198，199
    private static final String regStr = "^((13[0-9])|(145,147)|(15[^4])|(166)|(17[0-8])|(18[0-9])|(19[8-9]))\\d{8}$";

    public static boolean isMobile(String str)
            throws PatternSyntaxException {
        Pattern p = Pattern.compile(regStr);
        Matcher m = p.matcher(str);
        return m.matches();
    }

    //基于Luhn算法的银行卡卡号的格式校验
    public static boolean matchLuhn(String str) {
        int[] numbers = new int[str.length()];
        for (int i = 0, length = numbers.length; i < length; i++) {
            numbers[i] = Integer.valueOf(String.valueOf(str.charAt(length - i - 1)));
        }
        for (int i = 0, length = numbers.length; i < length; i++) {
            if (i % 2 == 1) {
                int doubleValue = numbers[i] * 2;
                numbers[i] = doubleValue > 9 ? doubleValue - 9 : doubleValue;
            }
        }
        int sum = 0;
        for (int num : numbers) {
            sum += num;
        }
        return sum % 10 == 0;
    }
}
